package com.hundsun.cprs.yyt.service.trade.service;

import java.util.List;
import java.util.Map;

import com.hundsun.cprs.yyt.service.common.dto.UserAccountDTO;
import com.hundsun.cprs.yyt.service.trade.domain.TradeEntrust;
import com.hundsun.cprs.yyt.service.trade.domain.query.TradeEntrustQuery;
import com.hundsun.cprs.yyt.service.trade.dto.EntrustDeliveryRequest;

public interface TradeEntrustService {
    
    /**
     * 创建挂单
     * @param entrust
     */
    void createEntrust(TradeEntrust entrust);
    
    /**
     * 创建挂单，自动上报
     * @param entrust
     */
    void createAndCommitEntrust(TradeEntrust entrust);
    
    
    /**
     * 分页查询委售单
     * @param query
     */
    void selectByPage(TradeEntrustQuery query);
    
    
    /**
     * 列表查询
     * @param query
     * @return
     */
    List<TradeEntrust> selectByList(TradeEntrustQuery query);
    
    
    /**
     * 获取委售详情
     * @param id
     * @return
     */
    TradeEntrust getTradeEntrustById(Long id);
    
    
    /**
     * 上报委托订单
     * @param entrust
     */
    void entrust(TradeEntrust entrust);
    
    
    /**
     * 更新指定委托单状态
     * @param id
     * @param entrustStatus
     * @return
     */
    TradeEntrust updateEntrustStatus(TradeEntrust entrust,Integer expectEntrustStatus);
    
    /**
     * 批量更新委托订单
     * @param entrusts
     */
    void batchUpdateEntrust(List<TradeEntrust> entrusts);

    /**
     * 更新委托单
     *
     * */
    void updateEntrustOrder(TradeEntrust tradeEntrust);

    /**
     * 获取某个商品正在委售的总数
     * @param goodsId
     *
     * */
    int getCommitedQuantitySumByGoodsId(Integer goodsId);
    
    /**
     * 按条件获取挂售总数
     * @param query
     * @return
     */
    long getTradeQuantitySumByQuery(TradeEntrustQuery query);

    /**
     * 根据订单编号查委托单详情
     * @param
     *
     * */
    TradeEntrust getTradeEntrustByOrderSn(String orderSn);

    /**
     * 获取用户当日挂售总次数和总金额
     *
     * */
    Map<String,Long> getUserDaliyEntrustTimeAndMoney(TradeEntrustQuery query);

    /**
     * 挂售单申请退货
     * @param tradeEntrust
     *
     * */
    void returnGoods(TradeEntrust tradeEntrust);

    /**
     * 挂售单申请提货
     * @param tradeEntrust,request
     * */
    void applyDeliveryGoods(TradeEntrust tradeEntrust,EntrustDeliveryRequest request);

    /**
     * 分页查询待审核的挂售单列表
     * @param query
     *
     * */
    void selectAuditByPage(TradeEntrustQuery query);

    /**
     * 审核挂售单列表
     * @param entrustIds
     *
     * */
    void auditEntrust(String[] entrustIds);

    /**
     * 撤单接口
     * @param entrustNo
     */
    void cancelEntrust(Long entrustNo);
}
